package com.elinshaw.a.overlay

/**
 * 加倍特质
 * 该特质必须混入拥有该方法具体定义的类中
 */
trait Doubling extends IntQueue {
  abstract override def put(x: Int) = {
    super.put(2 * x)
  }
}

/**
 * 加1特质
 * 该特质必须混入拥有该方法具体定义的类中
 */
trait Incrementing extends IntQueue {
  abstract override def put(x: Int) = {
    super.put(x + 1)
  }
}

/**
 * 过滤特质
 * 该特质必须混入拥有该方法具体定义的类中
 */
trait Filtering extends IntQueue {
  abstract override def put(x: Int) = {
    if (x >= 0) super.put(x)
  }
}

/**
 * 可叠加修改的特质
 * 特质顺序很重要
 * 越靠右的特质越先作用
 * Scala将类和其继承类和特质线性化排列依次调用
 */
class MyQueue extends BasicIntQueue with Doubling with Incrementing with Filtering





